python - Python 类中 \'cls\' 和 \'self\' 之间的区别?
全部标签 有一种约定,在可能的情况下,通过对象的实例变量来引用对象的属性。PracticalObject-OrientedDesigninRuby说:Alwayswrapinstancevariablesinaccessormethodsinsteadofdirectlyreferringtovariables...这显示了一个例子,我已经释义了:classGearattr_reader:chainring,:cog...defratio#thisisbad#@chainring/@cog.to_f#thisisgoodchainring/cog.to_fend我看到使用实例变量创建新对象的最常
我不明白导入库或模块的三种方法之间的区别。据我目前的了解,load'file.rb'会将外部文件的内容导入当前文件而:require'file.rb'将执行相同的功能,但不会导入已经导入的文件。require_relative'file.rb'类似于require,但它将加载仅在当前目录中的文件,而require将使用搜索路径$:试图找到该文件。我毫不怀疑我对这三种机制的理解是有缺陷的。谁能提供一些说明? 最佳答案 load在您想要导入文件时使用,无论它是否已经导入。require或require_relative仅当您想要导入尚未
instance_eval方法在其block中改变自身,例如:classD;endd=D.newd.instance_evaldoputsself#printsomethinglike#,not'main'!end如果我们自己定义一个方法(或任何其他方法(除了instance_eval)需要一个block),当打印self时,我们将得到'main',这与instance_eval方法不同。例如:[1].eachdo|e|putsself#print'main'end我如何定义一个像instance_eval这样的方法(需要一个block)?提前致谢。 最佳答
我有以下代码:classMyClassmoduleMyModuleclass当我调用方法时myfunction像这样,它工作正常:>me=MyClass::MyModule.myfunction=>"Nathan">me=>"Nathan"但是如果我删除了class并添加self.myfunction的前缀,它不起作用。例如:classMyClassmoduleMyModuleattr_accessor:first_namedefself.myfunctionMyModule.first_name="Nathan"endendend>me=MyClass::MyModule.myfun
使用有什么区别:require'digest'和load'digest' 最佳答案 如果您需要同一个文件两次,它只会被加载和计算一次。另一方面,load每次都会加载和计算文件。实际文件名的解析方式也存在差异(thanks,Saurabh)。这实际上意味着什么?假设我们有一个库foo#foo.rbclassFoodefbarputs'bar'enddefquuxputs'quux'endend然后我们有一个文件进行一些非幂等操作。比如说,取消定义一个方法#mod.rbclassFooundef:barend然后,如果我们require
在定义const_missing时,我对Ruby的行为感到非常困惑和class中的其他类方法定义而不是使用defself.foo句法。我正在尝试做这样的事情:classFooclass我主要使用class定义类方法的语法。但是,它没有按预期工作。const_missing永远不会被调用。以上结果导致NameError。像这样定义这两种方法按预期工作:defself.fooputsMISSINGenddefself.const_missing(name)puts"#{name}missing"end我认为classsyntax只是定义类方法的另一种方式,但完全等同于defself.foo
我想知道如何在另一个类的一个类的实例中调用一个方法。这是我想出来的classClassAdefmethodreturn"Thisisamethod_from_class_A"endendclassClassBdefinitialize@method_from_class_A=instance.methodenddefmethod_calls_method@method_from_class_Aendendinstance=ClassA.newinstance2=ClassB.newputsinstance2.method_calls_method但是我得到这个错误:Testing.rb
像下面这样在其父类下定义子类是惯例吗?classElementclassDiv还是让模块包含子类更合适?classElementendmoduleElementsclassDiv或者在一个模块中创建一个“基”类并在同一个模块中定义子类?moduleElementclassBaseendclassDiv或者强制命名约定更好?classElementendclassDivElement似乎每个库都选择不同的命名空间/命名约定。哪个最好用?各自的优缺点是什么? 最佳答案 TL;博士:最传统和最好的方法是使用包含基类及其子类的模块。但让我们
我正在尝试设置在我的机器上使用Ruby1.9.2运行的Rails3.0.3。我已经安装了rvm并用它来安装Ruby1.9.2。接下来要做什么来安装我想要的gem?特别是,请给出安装RubyGems1.3.6的命令,因为Rails3.0.3专门要求安装它。rvm可以自己安装Rails,还是我需要RubyGems? 最佳答案 是的,您可以使用rvm安装gems。使用:rvmuse1.9.2#Makesureyou'reusingtheinstalledversionrvmgeminstall--version'3.0.3'rails已更
我有许多继承自一个父类(superclass)的类。作为模块定义的父类(superclass)。模块内部是一个设置一些实例变量的self.included(base)方法。所以像这样:moduleMyModuledefself.included(base)base.instance_variable_set("@my_instance_variable",{})endendclassMySuperClassincludeMyModuleendclassClassA除非我明确地将MyModule包含在ClassA和ClassB中,否则我的实例变量将不会在这两个类中设置。有没有办法确保在每